#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/9/28 9:38
# @Author  : 朱宽
# @File    : ProcessForm.py
# @Software: Win10、Python3.8.5 and Pycharm
'''
处理HTML中的table表格11.14
'''
class processTableForm():
    '''
    定义了：
    1、定位页面table中的字符串，并点击
    2、获取表格总行数
    3、获取表格总列数
    4、获取具体第row行，第col列的元素
    5、定位string相应的页面元素，并以 列表 形式返回
    '''
    def click_element_in_table(self,table_element,string):
        '''
        1、定位页面table中的字符串，并点击
        :param table_element:
        :param string:
        :return:
        '''
        tr_list=table_element.find_elements_by_tag_name("tr")#行的列表
        for row in tr_list:  #在每行的列表中查找对应的列的列表，并循环
            td_list=row.find_elements_by_tag_name("td")#列的列表
            for col in td_list:#在列的列表中的查找与string对应的元素
                if col.text==string:
                    col.click()
    def get_row_count(self,table_element):
        '''
        2、获取表格总行数
        :param table_element:
        :return:
        '''
        tr_list=table_element.find_elements_by_tag_name("tr")
        row_count=len(tr_list)
        return row_count
    def get_col_count(self,table_element):
        '''
        3、获取表格总列数
        :param table_element:
        :return:
        '''
        tr_list=table_element.find_elements_by_tag_name("tr")
        col_count=None
        for row in tr_list:#每一行都会有对应的列数，这种情况适用于每行列数相同的情况。如果每行列数不同，则返回一个每行的列数的列表。
            td_list=row.find_elements_by_tag_name("td")
            col_count=len(td_list)
        return col_count
    def get_cell_by_row_col(self,table_element,row,col):
        '''
        4、获取具体第row行，第col列的元素
        :param table_element:
        :param row:
        :param col:
        :return:
        '''
        tr_list=table_element.find_elements_by_tag_name("tr")
        if row>0:
            target_row=tr_list[row-1]
            td_list=target_row.find_elements_by_tag_name("td")
            if col>0:
                target_cell=td_list[col-1]
                return target_cell
            else:
                raise ("col 必须大于零")
        else:
            raise ("row 必须大于零")
    def get_cell_by_string(self,table_element,string):
        '''
        5、定位string相应的页面元素，并以 列表 形式返回
        :param table_element:
        :param string:
        :return:
        '''
        string_element=[]
        tr_list = table_element.find_elements_by_tag_name("tr")  # 行的列表
        for row in tr_list:  # 在每行的列表中查找对应的列的列表，并循环
            td_list = row.find_elements_by_tag_name("td")  # 列的列表
            for col in td_list:  # 在列的列表中的查找与string对应的元素
                if col.text == string:
                    string_element.append(col)
                else:
                    pass
        return string_element

if __name__=="__main__":
    pass